#include "crkbd.h"


#ifdef AUDIO_ENABLE
    float tone_startup[][2] = SONG(STARTUP_SOUND);
    float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif

#ifdef SSD1306OLED
void led_set_kb(uint8_t usb_led) {
    // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
    //led_set_user(usb_led);
}
#endif

#ifdef RGB_MATRIX_ENABLE

  // Logical Layout
  // Columns
  // Left
  // 0  1  2  3  4  5
  //                   ROWS
  // 25 24 19 18 11 10   0
  //    03    02    01
  // 26 23 20 17 12 09   1
  //    04    05    06
  // 27 22 21 16 13 08   2
  //
  //          15 14 07   3
  //
  // Right
  // 0  1  2  3  4  5
  //                    ROWS
  // 25 24 19 18 11 10   4
  //    03    02    01
  // 26 23 20 17 12 09   5
  //    04    05    06
  // 27 22 21 16 13 08   6
  //
  //          15 14 07   7
  //
  // Physical Layout
  // Columns
  // 0  1  2  3  4  5  6  7  8  9  10 11 12 13
  //                                           ROWS
  // 25 24 19 18 11 10       10 11 18 19 24 25  0
  //    03    02    01       01    02    03
  // 26 23 20 17 12 09       09 12 17 20 23 26  1
  //    04                               04
  // 27 22 21 16 13 08       08 13 16 21 22 27  2
  //          05    06       06    05
  //           15 14 07     07 14 15              3

/* {row | col << 4} logical layout rows/cols
 *      |                    {x=0..224,     y=0..64} physical layout
 *      |                            |           |     modifier
 *      |                            |           |   */
#define RGB_MATRIX_LEFT_LEDS  \
    { { 0xFF           }, {  85, 16 }, 2 }, /*  1 */ \
    { { 0xFF           }, {  50, 13 }, 2 }, /*  2 */ \
    { { 0xFF           }, {  16, 20 }, 2 }, /*  3 */ \
    { { 0xFF           }, {  16, 38 }, 2 }, /*  4 */ \
    { { 0xFF           }, {  50, 48 }, 2 }, /*  5 */ \
    { { 0xFF           }, {  85, 52 }, 2 }, /*  6 */ \
    { { 3 | ( 5 << 4 ) }, {  95, 63 }, 1 }, /*  7 */ \
    { { 2 | ( 5 << 4 ) }, {  85, 39 }, 4 }, /*  8 */ \
    { { 1 | ( 5 << 4 ) }, {  85, 21 }, 4 }, /*  9 */ \
    { { 0 | ( 5 << 4 ) }, {  85,  4 }, 4 }, /* 10 */ \
    { { 0 | ( 4 << 4 ) }, {  68, 02 }, 4 }, /* 11 */ \
    { { 1 | ( 4 << 4 ) }, {  68, 19 }, 4 }, /* 12 */ \
    { { 2 | ( 4 << 4 ) }, {  68, 37 }, 4 }, /* 13 */ \
    { { 3 | ( 4 << 4 ) }, {  80, 58 }, 1 }, /* 14 */ \
    { { 3 | ( 3 << 4 ) }, {  60, 55 }, 1 }, /* 15 */ \
    { { 2 | ( 3 << 4 ) }, {  50, 35 }, 4 }, /* 16 */ \
    { { 1 | ( 3 << 4 ) }, {  50, 13 }, 4 }, /* 17 */ \
    { { 0 | ( 3 << 4 ) }, {  50,  0 }, 4 }, /* 18 */ \
    { { 0 | ( 2 << 4 ) }, {  33,  3 }, 4 }, /* 19 */ \
    { { 1 | ( 2 << 4 ) }, {  33, 20 }, 4 }, /* 20 */ \
    { { 2 | ( 2 << 4 ) }, {  33, 37 }, 4 }, /* 21 */ \
    { { 2 | ( 1 << 4 ) }, {  16, 42 }, 4 }, /* 22 */ \
    { { 1 | ( 1 << 4 ) }, {  16, 24 }, 4 }, /* 23 */ \
    { { 0 | ( 1 << 4 ) }, {  16,  7 }, 4 }, /* 24 */ \
    { { 0 | ( 0 << 4 ) }, {   0,  7 }, 1 }, /* 25 */ \
    { { 1 | ( 0 << 4 ) }, {   0, 24 }, 1 }, /* 26 */ \
    { { 2 | ( 0 << 4 ) }, {   0, 41 }, 1 }, /* 27 */

#define RGB_MATRIX_RIGHT_LEDS  \
    { { 0xFF           }, { 139, 16 }, 2 }, /*  1 */ \
    { { 0xFF           }, { 174, 13 }, 2 }, /*  2 */ \
    { { 0xFF           }, { 208, 20 }, 2 }, /*  3 */ \
    { { 0xFF           }, { 208, 38 }, 2 }, /*  4 */ \
    { { 0xFF           }, { 174, 48 }, 2 }, /*  5 */ \
    { { 0xFF           }, { 139, 52 }, 2 }, /*  6 */ \
    { { 7 | ( 5 << 4 ) }, { 129, 63 }, 1 }, /*  7 */ \
    { { 6 | ( 5 << 4 ) }, { 139, 39 }, 4 }, /*  8 */ \
    { { 5 | ( 5 << 4 ) }, { 139, 21 }, 4 }, /*  9 */ \
    { { 4 | ( 5 << 4 ) }, { 139,  4 }, 4 }, /* 10 */ \
    { { 4 | ( 4 << 4 ) }, { 156, 02 }, 4 }, /* 11 */ \
    { { 5 | ( 4 << 4 ) }, { 156, 19 }, 4 }, /* 12 */ \
    { { 6 | ( 4 << 4 ) }, { 156, 37 }, 4 }, /* 13 */ \
    { { 7 | ( 4 << 4 ) }, { 144, 58 }, 1 }, /* 14 */ \
    { { 7 | ( 3 << 4 ) }, { 164, 55 }, 1 }, /* 15 */ \
    { { 6 | ( 3 << 4 ) }, { 174, 35 }, 4 }, /* 16 */ \
    { { 5 | ( 3 << 4 ) }, { 174, 13 }, 4 }, /* 17 */ \
    { { 4 | ( 3 << 4 ) }, { 174,  0 }, 4 }, /* 18 */ \
    { { 4 | ( 2 << 4 ) }, { 191,  3 }, 4 }, /* 19 */ \
    { { 5 | ( 2 << 4 ) }, { 191, 20 }, 4 }, /* 20 */ \
    { { 6 | ( 2 << 4 ) }, { 191, 37 }, 4 }, /* 21 */ \
    { { 6 | ( 1 << 4 ) }, { 208, 42 }, 4 }, /* 22 */ \
    { { 5 | ( 1 << 4 ) }, { 208, 24 }, 4 }, /* 23 */ \
    { { 4 | ( 1 << 4 ) }, { 208,  7 }, 4 }, /* 24 */ \
    { { 4 | ( 0 << 4 ) }, { 224,  7 }, 1 }, /* 25 */ \
    { { 5 | ( 0 << 4 ) }, { 224, 24 }, 1 }, /* 26 */ \
    { { 6 | ( 0 << 4 ) }, { 224, 41 }, 1 }, /* 27 */

#ifdef RGB_MATRIX_SPLIT_RIGHT
rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
        RGB_MATRIX_RIGHT_LEDS
        RGB_MATRIX_LEFT_LEDS
    };
#else
rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
        RGB_MATRIX_LEFT_LEDS
        RGB_MATRIX_RIGHT_LEDS
    };
#endif

#endif
void matrix_init_kb(void) {

    #ifdef AUDIO_ENABLE
        _delay_ms(20); // gets rid of tick
        PLAY_SONG(tone_startup);
    #endif

	matrix_init_user();
};

void shutdown_kb(void) {
    #ifdef AUDIO_ENABLE
        PLAY_SONG(tone_goodbye);
      	_delay_ms(150);
      	stop_all_notes();
    #endif
}
